Existing processing systems often include multiple processing devices. For example, some systems include a central processing unit (CPU) and a graphics processing unit (GPU). A variety of different applications run on the CPU. Some of these applications can generate commands that the CPU sends to the GPU for execution. For example, applications running on the CPU can generate rendering commands. The rendering commands are sent to the GPU, which uses the results of the rendering commands to control a display.
Existing systems often do not allow for other types of commands to be sent to the GPU for execution. For example, computational commands, e.g., physics or artificial intelligence commands, often cannot be sent to the GPU for execution because the CPU needs results from these commands relatively quickly. Because the computational commands may have to wait behind other commands to be executed, the latency incurred by sending computational commands to the GPU may be too high.
Not sending the computational commands to the GPU for execution, however, means that the CPU must execute the commands. This adds to the processing burden of the CPU and can hamper the performance of the system. Thus, what is needed are methods and systems that allow for different types of commands to be executed in a desired order so that results from relatively high priority commands can be obtained within a desirable latency.